#ifndef FIREBOX_WORLD_H
#define FIREBOX_WORLD_H

#include "IUpdaterController.h"
#include "SteamNonCopyable.h"
#include "Entity.h"
#include "Vectors.h"
#include <vector>
#include "EntityFactory.h"

namespace steam
{
	namespace firebox
	{
		class World : public IUpdaterController, public base::SteamNonCopyable
		{
		public:
			typedef std::vector<firebox::Entity*> Entities;
			typedef std::vector<base::IUpdater*> Updaters;

			World();

			~World();

			void update(float elapsedTime);

			void addUpdater( base::IUpdater* updater );

			void removeUpdater( base::IUpdater* updater );

			void addEntity(firebox::Entity* entity);

			const Entities& getEntities() const;

			base::EntityFactory getFactory() const;		

		private :
			Entities m_entities;
			Updaters m_updaters;
			base::EntityFactory m_factory;	
			//moon::IRenderer* m_renderer;
		};

	}
}

#endif